﻿using System;

namespace Anmlz.Data.Contracts
{
    using Anmlz.Model.Entities;

    public interface IUnitOfWork : IDisposable
    {
        AnmlzDbContext DbContext { get; }
        IRepository<UserType> UserTypes { get; }
        IRepository<BreedGroup> BreedGroups { get; }
        IRepository<Breed> Breeds { get; }
        IRepository<BreedToCreatureTemperament> BreedToCreatureTemperaments { get; }
        IRepository<BreedToCreatureColor> BreedToCreatureColors { get; }
        IRepository<BreedToCreatureCharacteristic> BreedToCreatureCharacteristics { get; }
        IRepository<City> Cities { get; }
        IRepository<Country> Countries { get; }
        IRepository<Creature> Creatures { get; }
        IRepository<CreatureColor> CreatureColors { get; }
        IRepository<CreatureSizeType> CreatureSizeTypes { get; }
        IRepository<CreatureType> CreatureTypes { get; }
        IRepository<CreatureTemperament> CreatureTemperaments { get; }
        IRepository<UserRole> UserRoles { get; }
        IRepository<User> Users { get; }
        IRepository<UserWebsiteUrl> UserWebsiteUrls { get; }
        IRepository<Image> Images { get; }
        IRepository<Currency> Currencies { get; }
        IRepository<ImageToUser> ImageToUsers { get; }
        IRepository<ImageToCreature> ImageToCreatures { get; }
        IRepository<SellingAd> SellingAds { get; }
        IRepository<ImageToSellingAd> ImageToSellingAds { get; }
        IRepository<CreatureCharacteristic> CreatureCharacteristics { get; }

        CreatureTemperament GetCreatureTemperamentByName(string name);
        CreatureColor GetCreatureColorByName(string name);
        Country GetCountryByName(string name);
        bool Save();
        bool DbInitialized { get; }
    }
}
